package cn.zeal4j;

/**
 * @author Administrator
 * @file Java-StandardEdition-Review
 * @create 2020 09 30 11:43
 */
public class Array {
    public static void main(String[] args) {
        // 数组的特性是连续的开辟内存空间，内存地址连续，Java还要求数组的数据类型相同，且长度是固定的，
        // 固定的意思是一旦被声明就不能在改变长度了
        // 数组的地址就是数组的第一个元素的地址，每一个元素的位置都提供了索引，元素的获取是通过该数组元素数据类型的字节长度 * 所在的索引 * 首个元素地址得到

        int[] intArray; // 声明一个数组
        intArray = new int[10]; // 初始化赋值

        // 初始化的元素是具备默认值的
        // boolean -> false
        // byte short int long -> 0
        // char 是一个 \0xcc 什么来着的
        // float double -> 0.0
        // 引用类型 null

        // 直接赋值 可以动态初始化，也可以直接静态赋值
        int[] intArray2 = new int[5];
        int[] intArray3 = {1, 2, 3, 4, 5};

        // 通过索引值获取
        int a = intArray[2];
        // 也可以赋值
        intArray[3] = 100;

        // 索引支持运算表达式和变量
        System.out.println(intArray[ 4 + (-3) ] );

        // 同属数值类型的 恶意嵌套是允许的
        int[]funnyPlay = {1,2,3,4,5,6,7,8,9,10};
        int wtf = funnyPlay[funnyPlay[funnyPlay[funnyPlay[funnyPlay[funnyPlay[funnyPlay[funnyPlay[funnyPlay[funnyPlay[0]]]]]]]]]];
        System.out.println(wtf); // 10

        // 之前有说过 数组提供了一个属性length
        int length = intArray.length; // 获取数组的长度

        // 遍历数组
        for (int i = 0; i < intArray.length; i++) {
            System.out.println(intArray[i]);
        }
        // 使用迭代器遍历
        for (int i : intArray) {
            System.out.println("直接获取元素");
        }

        // 多重数组
        int[][] twistedArr = new int[10][10];

        int[][] staticAssignmentArr = {
                {1, 3, 4, 5, 8 ,10},
                {1, 3, 4, 5, 8 ,10},
                {1, 3, 4, 5, 8 ,10},
                {1, 3, 4, 5, 8 ,10},
        };

        // 多维数组的处理，也就是数组中再套数组
        for (int i = 0; i < twistedArr.length; i++) {
            for (int i1 = 0; i1 < twistedArr[i].length; i1++) {
                System.out.println(twistedArr[i][i1]); // 多维度数组的遍历
            }
        }


    }
}
